﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;

namespace ActionTrackerEntities
{
    public class Accion
    {
        [Display(Name = "ID")]
        public virtual int IdAccion { get; set; }
        
        [Display(Name = "Fecha de Inicio (*)")]
        [Required(ErrorMessage = "La fecha es requerida")]
        [DataType(DataType.DateTime, ErrorMessage = "La fecha no es válida")]
        [RegularExpression(@"^(((((0[1-9])|(1\d)|(2[0-8]))\/((0[1-9])|(1[0-2])))|((31\/((0[13578])|(1[02])))|((29|30)\/((0[1,3-9])|(1[0-2])))))\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\/02\/(19|20)(([02468][048])|([13579][26]))))$", ErrorMessage = "La fecha debe tener el formato dd/mm/aaaa")]
        public virtual DateTime? FechaInicio { get; set; }

        [Display(Name = "Fecha de Fin")]
        [DataType(DataType.DateTime, ErrorMessage = "La fecha no es válida")]
        [RegularExpression(@"^(((((0[1-9])|(1\d)|(2[0-8]))\/((0[1-9])|(1[0-2])))|((31\/((0[13578])|(1[02])))|((29|30)\/((0[1,3-9])|(1[0-2])))))\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\/02\/(19|20)(([02468][048])|([13579][26]))))$", ErrorMessage = "La fecha debe tener el formato dd/mm/aaaa")]
        public virtual DateTime? FechaFin { get; set; }
        
        [Display(Name = "Fecha de Vencimiento (*)")]
        [DataType(DataType.DateTime, ErrorMessage = "La fecha no es válida")]
        [RegularExpression(@"^(((((0[1-9])|(1\d)|(2[0-8]))\/((0[1-9])|(1[0-2])))|((31\/((0[13578])|(1[02])))|((29|30)\/((0[1,3-9])|(1[0-2])))))\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\/02\/(19|20)(([02468][048])|([13579][26]))))$", ErrorMessage = "La fecha debe tener el formato dd/mm/aaaa")]
        [Required(ErrorMessage = "La fecha es requerida y debe ser mayor que la fecha de inicio")]
        public virtual DateTime FechaVencimiento { get; set; }
        
        public virtual Usuario Usuario { get; set; }
        [Display(Name = "Usuario (*)")]
        [Required(ErrorMessage = "El usuario es requerido")]
        public virtual int IdUsuario
        {
            get { return Usuario != null ? Usuario.IdUsuario : _idUsuario; }
            set { _idUsuario = value; }
        }
        private int _idUsuario;
        
        public virtual Reunion Reunion { get; set; }
        [Display(Name = "Reunion (*)")]
        [Required(ErrorMessage = "La reunión es requerida")]
        public virtual int IdReunion
        {
            get { return Reunion != null ? Reunion.IdReunion : _idReunion; }
            set { _idReunion = value; }
        }
        private int _idReunion;

        public virtual Proyecto Proyecto { get; set; }
        [Display(Name = "Proyecto (*)")]
        [Required(ErrorMessage = "El proyecto es requerido")]
        public virtual int IdProyecto
        {
            get { return Proyecto != null ? Proyecto.IdProyecto : _idProyecto; }
            set { _idProyecto = value; }
        }
        private int _idProyecto;

        [Display(Name = "Estado")]
        public virtual int EstadoAccion { get; set; } //Ver clase EstadoAccionEnum


        [Display(Name = "Descripción (*)"), StringLength(100, ErrorMessage = "La descripción no debe exceder los 100 caracteres")]
        [Required(ErrorMessage = "La descripción es requerida")]
        [DataType(DataType.Text, ErrorMessage = "La descrición no es válida")]
        public virtual string Descripcion { get; set; }

        [Display(Name = "Historial de Observaciones")]
        [Required(ErrorMessage = "La observación es requerida")]
        public virtual string Observacion
        { get; set; }

        public virtual string StrFechaInicio
        {
            get { return FechaInicio.HasValue ? FechaInicio.Value.ToString("dd/MM/yyyy") : string.Empty; }
        }
        public virtual string StrFechaFin
        {
            get { return FechaFin.HasValue ? FechaFin.Value.ToString("dd/MM/yyyy") : string.Empty; }
        }
        public virtual string StrFechaVencimiento
        {
            get { return FechaVencimiento.ToString("dd/MM/yyyy"); }
        }
        
        public virtual string StrEstadoAccion
        {
            get
            {
                switch (EstadoAccion)
                {
                    case 1:
                        return "Abierta";
                    case 3:
                        return "Cerrada";
                    default:
                        return string.Empty;
                }
            }
        }

        [Display(Name = "Observación")]
        public virtual string ObservacionNueva{get;set;}


        
    }
}
